Problem
可持久化并查集 by zky
Description
个集合 个操作
操作:
合并所在集合
回到第次操作之后的状态(查询算作操作)
询问是否属于同一集合,是则输出否则输出
Input
第一行两个整数
以后行,每行三个或两个整数或,意义如上所述
Ouput
Sample Input
1 | 5 6 |
Sample Output
1 | 1 |
Hint
标签:主席树
可持久化数组
Solution
本题的做法其实和并查集没太大关联。
如果是撤销,那可以用不加路径压缩的并查集完成,但是如果回到某时间,则不太好写。
这时,我们发现并查集这个东西构造其实很简单,只需要一个数组就行了。所以我们自然可以想到直接用一个二维数组存储每个时间的数组,即用增加的一维表示时间。
但是,、是级别,所以肯定会,这里我们就需要用到主席树,把数组可持久化。这里需要注意我们不能用路径压缩优化,因为我们需要回到前面的状态,为了让它跑得更快,我们可以用按秩合并优化。
Code
1 |
|